# UDP网络编程概念
"""
一、UDP协议
UDP网络协议（User Data Protocol，用户数据协议）：
是一个无连接的简单的面向数据的运输层协议。
UDP不提供可靠性，它只是把应用程序传给IP层的数据报发送出去，但是并不能保证它们能到达目的。
由于UDP在传输数据包前不用在客户和服务器之间建立一个连接，且没有超时重发等机制，故而传输速度很快。

UDP是一种面向无连接的协议，每个数据报都是一个独立的信息，包括完整的源地址或目的地，
它在网络上以任何可能的路径传往目的地，因此能否到达目的地，到达目的地的时间以及内容的正确性都是不能被保证的。

【使用情况】
UDP是面向消息的协议，通信时不需要建立连接，数据的传输自然是不可靠的。UDP一般用于多点通信和实时的数据业务，比如”
    ·语音广播
    ·视频
    ·TFTP（简单文件传送）
    ·大型网路游戏
"""

"""
二、Socket编程
1、socket（套接字）的定义
实现网络编程进行数据传输的一种技术手段，网络上各种各样的网络服务大多是基于Socket来完成通信的。

Socket的英文原义是“孔”或“插座”，网络上的两个程序通过一个双向的通信连接实现数据的交换，
这个连接的一端称为一个socket.

建立网络通信连接至少要一对端口号（socket），socket本质是编程接口（API），对TCP/IP的封装，
TCP/IP也要提供可供程序员做网络开发所用的接口，这就是Socket编程接口。

基本上，Socket是任何一种计算机网络通讯中的最基本的内容，例如当你在浏览器地址中输入http://www.baidu.com会打开一个套接字，
然后连接到http://www.baidu.com/并读取响应的页面，然后显示出来，而其他一些聊天客户端如QQ和SKYPE也是类似。
任何网络通讯都是通过Socket来完成的。

Python官方关于Socket的函数请看 http://docs.python.org/library/socket.html
    ·创建TCP Socket  s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    ·创建UDP Socket  s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
2.Socket的类型
socket（family,type[,protocal])使用给定的地址族，套接字类型，协议编号（默认为0）来创建套接字。

3.Scoket相关函数

1）服务器端的socket函数
s.bind(address)
s.listen(backlog)  用于TCP
s.accept()         用于TCP

2)客户端的socket函数
s.connect(address)
s.connect_ex(address)

3)公共的socket函数
s.recv(bufsize[,flag])
s.send(string[,flag])

s.sendall(string[,flag])

s.revfrom(bufsize[,flag])       只适用UDP
s.senfto(string[,flag],address) 只适用UDP

s.close()
s.getpeername()
s.getsockname()
s.setsockopt(level,optname,value)
s.getsockopt(level,optname[.buflen])
s.settimeout(timeout)
"""